package exp.day01;

/*
 * 选人:一个小组共五人，分别为A、B、C、D、E。现有一项任务，要他们中的3个人去完成。
 *     (1)A、C不能都去；
 *     (2)B、C不能都不去；
 *     (3)如果C去了，D、E就只能去一个，且必须去一个；
 *     (4)B、C、D不能都去;
 *     (5)如果B去了，D、E就不能都去。编程找出此项任务该由哪三人去完成的所有组合。
 *        p->q   !p||q
 *        !(c==1)||(d+e==1)
 */
public class P08_SelectPeople {
    public static void main(String[] args) {
        System.out.println("共有如下三人组合情形:");
        for (int i = 1; i <= 5; i++) {
            for (int j = i + 1; j <= 5; j++) {
                for (int k = j + 1; k <= 5; k++) {          //i j k 枚举组合情况
                    if ((i == 1 && j == 3) || (i == 1 && k == 3))//AC不能都去
                        continue;
                    if (i == 2 && j == 3 && k == 4)//BCD不能都去
                        continue;

                    int count = 0;//BC至少去一个
                    if (i == 2 || j == 2) count++;
                    if (i == 3 || j == 3 || k == 3) count++;
                    if (count == 0)
                        continue;

                    count = 0;
                    if (i == 3) {//i=C去了，D、E只能去一个
                        if (j == 4 || k == 4) count++;
                        if (j == 5 || k == 5) count++;
                    }
                    if (count != 1)
                        continue;

                    count = 0;
                    if (j == 3) {//j=C去了，D、E就必须去一个
                        if (k == 4 || k == 5) count++;
                    }
                    if (count == 0)
                        continue;

                    if (k == 3)//k=C去了，D、E只能去一个
                        continue;

                    if (i == 2 || j == 2) {//如果B去了，D、E就不能都去
                        if ((j == 4 && k == 5) || (k == 4 && j == 5))
                            continue;
                    }
                    System.out.println(i+" "+j+" "+k);
                }
            }
        }
    }
}
